#ifndef CTRL_REG_H
#define CTRL_REG_H

#define OFFSET_CAMERA_CONTROL       0x00
#define OFFSET_CAMERA_EXP_LOW32bit  0x04
#define OFFSET_CAMERA_EXP_HIGH32bit 0x08
#define OFFSET_CAMERA_EXP_CTRL      0x0C
#define OFFSET_CAMERA_ADC_CTRL      0x10
#define OFFSET_CAMERA_SAMPLE_RATE   0x14

#define OFFSET_ID_VALUE             0x80
#define OFFSET_ADC_VALUE            0x84
#define OFFSET_EXP_STATUS           0x88

typedef struct {
    unsigned int baseAddr;
    int gpioHandler;
    unsigned int* gpioVirtualAddress;
} gpio_handle;

int gpio_setup(gpio_handle *handle, unsigned int baseAddr);

void gpio_set(gpio_handle *handle, int num, unsigned int val);

int gpio_get(gpio_handle *handle, int num);

void camera_open(gpio_handle *handle, unsigned int id);

void camera_close(gpio_handle *handle, unsigned int id);

int adc_value(gpio_handle *handle);

void camera_exp_period(gpio_handle *handle,int num,int num2);

void camera_exp_2us(gpio_handle *handle);

void camera_exp_set_us(gpio_handle *handle);

void camera_exp_set_us_stop(gpio_handle *handle);

void camera_adc_set_ctrl(gpio_handle *handle,int adc_ctrl,int slave_id);

void camera_adc_set_read(gpio_handle *handle,int slave_id);

void camera_adc_period(gpio_handle *handle, int num);

int id_value(gpio_handle *handle);

int adc_ctrl_reg(gpio_handle *handle);

int adc_value(gpio_handle *handle);

int iic_status(gpio_handle *handle);

int camera_exp_status(gpio_handle *handle);

#endif //

